/**
 * reducer函数：执行命令=》修改state数据（同时声明应用的默认state数据）
 * 定义：reducer函数接收旧的state和action对象，返回新的state
 */

import { ADD_TODO, DEL_TODO, TOGGLE_TODO } from "../actionTypes";



// 初始化应用的默认数据
const initState = [
  { id: 0, task: '学习', done: false },
  { id: 1, task: '吃鸡', done: false }
];

// 创建reducer
/**
 * 纯函数：没有副作用（调用API、路由跳转等）
 * @param {*} state 
 * @param {*} action 
 */
export function reducer(state = initState, action) {
  switch (action.type) {
    // 添加todo
    case ADD_TODO:
      let id = Math.random().toString(16).slice(2);
      let newState = [...state, { id, task: action.task, done: false }]
      return newState
    // 删除todo
    case DEL_TODO:
      return state.filter((item) => item.id !== action.id)
    // 改变todo的状态(已完成/未完成)
    // 遍历数据=》根据要修改的ID
    case TOGGLE_TODO:
      return state.map((item) => {
        const newItem = { ...item };
        // 要修改谁的状态
        if (item.id === action.id) {
          newItem.done = !newItem.done;
        }
        return newItem
      })
    default:
      return state
  }
}

